package com.ktjy.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ktjy.dto.DeptDTO;
import com.ktjy.pojo.SysDept;
import com.ktjy.mapper.SysDeptMapper;
import com.ktjy.service.ISysDeptService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 部门表 服务实现类
 * </p>
 *
 * @author jjx
 * @since 2025-07-29
 */
@Service
public class SysDeptServiceImpl extends ServiceImpl<SysDeptMapper, SysDept> implements ISysDeptService {

    @Override
    public List<SysDept> findList(DeptDTO deptDTO) {
        //查询数据
        QueryWrapper<SysDept> qw=new QueryWrapper<>();
        if(deptDTO.getDeptName()!=null && !deptDTO.getDeptName().isEmpty()){
            qw.like("dept_name",deptDTO.getDeptName());
        }
        if(deptDTO.getStatus()!=null && !deptDTO.getStatus().isEmpty()){
            qw.eq("status",deptDTO.getStatus());
        }
        return list(qw);
    }

    /**
     * 构建树形结构
     * @param nodes 所有节点的扁平列表
     * @param rootParentId 根节点的父ID，通常为0或null
     * @return 构建好的树形结构列表（根节点集合）
     */
    public List<SysDept> buildTree(List<SysDept> nodes, Long rootParentId) {
        // 1. 创建节点ID到节点对象的映射，提高查询效率
        Map<Long, SysDept> nodeMap = new HashMap<>();
        for (SysDept node : nodes) {
            nodeMap.put(node.getDeptId(), node);
        }

        // 2. 构建树形结构
        List<SysDept> rootNodes = new ArrayList<>();

        for (SysDept node : nodes) {
            Long parentId = node.getParentId();

            // 如果是根节点，直接加入根节点列表
            if (rootParentId.equals(parentId)) {
                rootNodes.add(node);
            } else {
                // 找到父节点并添加为子节点
                SysDept parentNode = nodeMap.get(parentId);
                if (parentNode != null) {
                    parentNode.getChildren().add(node);
                }
            }
        }
        return rootNodes;
    }

    @Override
    public boolean checkNameUnique(String name) {
        //查询数据
        QueryWrapper<SysDept> qw=new QueryWrapper<>();
        qw.eq("dept_name",name);
        return count(qw)>0;
    }
}
